Pre-fetching remote resources

ABSTRACT

Systems and methods are described for pre-fetching remote resources. A computerized method of pre-fetching remote resources includes calculating a probability of a request for a remote resource by a user within a validity period, based on a representation of historical requests for the remote resource by the user, pre-fetching the remote resource if the probability is greater than a threshold, intercepting an actual request for the remote resource by the user, recording the actual request into the representation of the historical requests by the user, and fulfilling the actual request for the remote resource using the pre-fetched remote resource.

BACKGROUND

Many computer programs (e.g., applications) use both local and remotecomponents/resources to execute during run-time. The remotecomponents/resources are traditionally downloaded from a remote source(e.g., a remote server) on demand when they are needed (e.g., when anapplication using these remote resources is launched, when a featurerequiring these remote resources is activated, etc.). This mechanism cancause delays in launching the application or executing certainfunctions, thus impacting system performances and end-user experiences.This problem becomes increasingly prominent in today's online world,especially for mobile applications running on high latency and lowbandwidth networks or applications based on thin-client models thataccess most data and resources over a network.

SUMMARY

In accordance with the disclosed subject matter, systems and methods aredescribed for pre-fetching remote resources.

Disclosed subject matter includes, in one aspect, a computerized methodof pre-fetching remote resources, which includes calculating aprobability of a request for a remote resource by a user within avalidity period, based on a representation of historical requests forthe remote resource by the user, pre-fetching the remote resource if theprobability is greater than a threshold, intercepting an actual requestfor the remote resource by the user, recording the actual request intothe representation of the historical requests by the user, andfulfilling the actual request for the remote resource using thepre-fetched remote resource.

In some embodiments, the computerized method of pre-fetching remoteresources further includes rendering the pre-fetched remote resourceobsolete if the pre-fetched remote resource expires based on thevalidity period.

In some other embodiments, the computerized method of pre-fetchingremote resources further includes receiving the representation of thehistorical requests by the user from a remote server, wherein thehistorical requests for the remote resource originate from multipledevices used by the user.

In some other embodiments, the computerized method of pre-fetchingremote resources further includes transmitting the representation of thehistorical requests by the user to the remote server.

In some other embodiments, the computerized method of pre-fetchingremote resources further includes receiving a second representation ofadditional historical requests for the remote resource by other usersfrom a remote server, and calculating the probability of the request forthe remote resource by the user within the validity period, based on thesecond representation of the additional historical requests for theremote resource by the other users.

In some other embodiments, the computerized method of pre-fetchingremote resources further includes setting the validity period.

In some other embodiments, the computerized method of pre-fetchingremote resources further includes setting the threshold.

Disclosed subject matter includes, in another aspect, a computer systemfor pre-fetching remote resources, which includes a probabilitycalculator configured to calculate a probability of a request for aremote resource by a user within a validity period, based on arepresentation of historical requests for the remote resource by theuser, a resource pre-fetcher configured to pre-fetch the remote resourceif the probability is greater than a threshold, a request interceptorconfigured to intercept an actual request for the remote resource by theuser, a historical request manager configured to record the actualrequest into the representation of the historical requests by the user,and a request fulfiller configured to fulfill the request for the remoteresource using the pre-fetched remote resource.

In some embodiments, the computer system for pre-fetching remoteresources further includes a pre-fetched resource manager configured torender the pre-fetched remote resource obsolete if the pre-fetchedremote resource expires based on the validity period.

In some other embodiments, the computer system for pre-fetching remoteresources further includes a pre-fetch server interface configured todownload the representation of the historical requests by the user froma remote server, the historical requests for the remote resourceoriginating from multiple devices used by the user.

In some other embodiments, the pre-fetch server interface is furtherconfigured to transmit the representation of the historical requests bythe user to the remote server.

In some other embodiments, the pre-fetch server interface is furtherconfigured to receive a second representation of additional historicalrequests for the remote resource by other users from a remote server,and the probability calculator is further configured to calculate theprobability of the request for the remote resource by the user withinthe validity period based on the second representation of the additionalhistorical requests for the remote resource by the other users.

In some other embodiments, the computer system for pre-fetching remoteresources further includes a pre-fetch configurator configured to setthe validity period.

In some other embodiments, the computer system for pre-fetching remoteresources further includes a pre-fetch configurator configured to setthe threshold.

Disclosed subject matter includes, in yet another aspect, anon-transitory computer readable medium having executable instructionsoperable to, when executed by a processor, cause the processor to:calculate a probability of a request for a remote resource by a userwithin a validity period, based on a representation of historicalrequests for the remote resource by the user, pre-fetch the remoteresource if the probability is greater than a threshold, intercept anactual request for the remote resource by the user, record the actualrequest into the representation of the historical requests by the user,and fulfill the actual request for the remote resource using pre-fetchedremote resource.

In some embodiments, the executable instructions are further operableto, when executed by the processor, cause the processor to render thepre-fetched remote resource obsolete if the pre-fetched remote resourceexpires based on the validity period.

In some other embodiments, the executable instructions are furtheroperable to, when executed by the processor, cause the processor toreceive the representation of the historical requests by the user from aremote server, wherein the historical requests for the remote resourceoriginate from multiple devices used by the user.

In some other embodiments, the executable instructions are furtheroperable to, when executed by the processor, cause the processor totransmit the representation of the historical requests by the user tothe remote server.

In some other embodiments, the executable instructions are furtheroperable to, when executed by the processor, cause the processor toreceive a second representation of additional historical requests forthe remote resource by other users from a remote server, and calculatethe probability of the request for the remote resource by the userwithin the validity period, based on the second representation of theadditional historical requests for the remote resource by the otherusers.

In some other embodiments, the executable instructions are furtheroperable to, when executed by the processor, cause the processor to setthe validity period.

In some other embodiments, the executable instructions are furtheroperable to, when executed by the processor, cause the processor to setthe threshold.

Various embodiments of the subject matter disclosed herein can provideone or more of the following capabilities. Systems and methods forpre-fetching remote resource data can increase system performance andenhance user experiences. A remote resource that will likely be used inthe near future by a user can be pre-fetched from a remote source suchthat when it is actually needed, it will already reside on the localdevice, thus eliminating/reducing delay. The probability of near-futureuse of remote resources by a user can be calculated based on historicalrequests by the user across multiple devices and sometimes also based onhistorical requests by other users.

These and other capabilities of embodiments of the disclosed subjectmatter will be more fully understood after a review of the followingfigures, detailed description, and claims.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 illustrates an exemplary launch process of a traditionalapplication.

FIG. 2 illustrates an exemplary launch process of an applicationaccording to certain embodiments of the subject matter disclosed herein.

FIG. 3 illustrates an exemplary networked communication environment.

FIG. 4 illustrates an exemplary remote resource pre-fetchingarrangement.

FIG. 5 illustrates a block diagram of an exemplary pre-fetch agent.

FIG. 6 illustrates an example of calculating a probability of requestinga remote resource.

FIG. 7 includes an exemplary process of pre-fetching remote resources.

FIG. 8 illustrates a block diagram of an exemplary pre-fetch client.

DESCRIPTION

In the following description, numerous specific details are set forthregarding the systems and methods of the disclosed subject matter andthe environment in which such systems and methods may operate, in orderto provide a thorough understanding of the disclosed subject matter. Itwill be apparent to one skilled in the art, however, that the disclosedsubject matter may be practiced without such specific details, and thatcertain features, which are well known in the art, are not described indetail in order to avoid complication of the disclosed subject matter.In addition, it will be understood that the embodiments described beloware only examples, and that it is contemplated that there are othersystems and methods that are within the scope of the disclosed subjectmatter.

Embodiments of the disclosed subject matter can provide features forpre-fetching remote resources, such as in a networked computingenvironment. Pre-fetching remote resource data can increase systemperformance and enhance user experiences. A remote resource that willlikely be used soon by a user can be pre-fetched from a remote source.The probability of near-future use of a certain remote resource by aparticular user can be calculated based on historical requests by thisparticular user. For example, if 90% of a user's previous logon eventsoccurred 8:30-9:00 am during weekdays, the probability that the userwill log on again 8:30-9:00 am in the next working day is high;therefore, the logon-related remote resources (e.g., user profile,wallpapers, user settings, etc.) can be pre-fetched to the local logondevice shortly before 8:30 am during weekdays so that when the user doesactually log on 8:30-9:00 am the local logon device can respond faster.The historical requests by a particular user can include requests by theuser across multiple devices. In addition, the probability for one usercan also be calculated based on historical requests by other users. Inone example, the other users can include users in the same department ororganization, users in the same time zone, or users who use the sameapplication, etc. Other embodiments are within the scope of thedisclosed subject matter.

FIG. 1 illustrates an exemplary launch process of a traditionalapplication. Referring to FIG. 1, a user first launches an applicationon a local device then waits for the application to be ready for use.Once launched, the application can begin its startup process. During thestartup process, the application typically asks the operating system(OS) to get the local and remote resources required by the application.The OS can then request and receive the remote resources from anetwork/cloud server and/or storage. Once the remote resources areavailable on the local device, the OS can complete setting up the localand remote resources for the application. The application can thencontinue processing the local and remote resources provided by the OS.After the application completes the startup process, the application istypically ready for use and the user can start using the application. Inthe exemplary application launch process illustrated in FIG. 1, theremote resources are retrieved from the remote source when they areneeded. Thus, the application (and the user) typically needs to wait forthe remote retrieval, which can be costly and time-consuming.

In comparison, FIG. 2 illustrates an exemplary launch process of anapplication utilizing certain features of the disclosure subject matter.Referring to FIG. 2, before a user launches an application on a localdevice, a pre-fetch agent running on the local device can predict thatthe user will likely launch an application in the near future. Based onthis prediction, the pre-fetch agent can ask the operating system (OS)to get the remote resources used by the application. The OS can thenrequest and retrieve the remote resources from the network/cloud serverand/or storage. The pre-fetched resources can then be stored on thelocal device.

When the user actually launches the application on the local device, theapplication can begin its startup process. The pre-fetch agent runningon the local device can intercept the application launch event. Insteadof asking the OS to retrieve the required remote resources from thenetwork/cloud server and/or storage, the pre-fetch agent can fulfill theapplication's need by using the pre-fetched resources already stored onthe local device. The OS can then complete setting up the local andremote resources for the application. The application can then continueprocessing the local and remote resources. After the applicationcompletes the startup process, the application is typically ready foruse and the user can start using the application. In the exemplaryapplication launch process illustrated in FIG. 2, the remote resourcesare pre-fetched from the remote source before they are actually needed.Thus the application (and the user) does not need to wait for thepotentially costly and time-consuming remote retrieval, thus enhancingsystem performance and improving user experiences.

Embodiments of the disclosed subject matter can be implemented in anetworked computing environment. FIG. 3 illustrates an exemplarynetworked communication environment 300 in accordance with certainembodiments of the disclosed subject matter. The networked communicationenvironment 300 can include a server 304, at least one client 306 (e.g.,client 306-1, 306-2, . . . 306-N), a physical storage medium 308, andcloud storage 310 and 312, which can all be coupled, directly orindirectly to a communication network 302.

Each client 306 can communicate with the server 304 to send data to, andreceive data from, the server 304 across the communication network 302.Each client 306 can be directly coupled to the server 304. Additionally,each client 306 can be connected to server 304 via any other suitabledevice, communication network, or combination thereof. For example, eachclient 306 can be coupled to the server 304 via one or more routers,switches, access points, and/or communication network (as describedbelow in connection with communication network 302). A client 306 caninclude, for example, a desktop computer, a mobile computer, a tabletcomputer, a cellular device, a smartphone, or any computing systems thatare capable of performing computation.

Server 304 can be coupled to at least one physical storage medium 308,which can be configured to store data for the server 304. Preferably,any client 306 can store data in, and access data from, the physicalstorage medium 308 via the server 304. FIG. 3 shows the server 304 andthe physical storage medium 308 as separate components; however, theserver 304 and physical storage medium 308 can be combined together.FIG. 3 also shows the server 304 as a single server; however, server 304can include more than one server. FIG. 3 shows the physical storagemedium 308 as a single physical storage medium; however, physicalstorage medium 308 can include more than one physical storage medium.The physical storage medium 308 can be located in the same physicallocation as the server 304, at a remote location, or any other suitablelocation or combination of locations.

FIG. 3 shows two embodiments of a cloud storage 310 and 312. Cloudstorage 310 and/or 312 can store data from physical storage medium 308with the same restrictions, security measures, authentication measures,policies, and other features associated with the physical storage medium308. While FIG. 3 shows the cloud storage 312 separate from thecommunication network 302, cloud storage 312 can also be part ofcommunication network 302 or another communication network. The server304 can use only cloud storage 310, only cloud storage 312, or bothcloud storages 310 and 312. While, FIG. 3 shows one cloud storage 310and one cloud storage 312, more than one cloud storage 310 and/or morethan one cloud storage 312 or any suitable combination thereof can beused.

The communication network 302 can include the Internet, a cellularnetwork, a telephone network, a computer network, a packet switchingnetwork, a line switching network, a local area network (LAN), a widearea network (WAN), a global area network, or any number of privatenetworks currently referred to as an Intranet, and/or any other networkor combination of networks that can accommodate data communication. Suchnetworks may be implemented with any number of hardware and softwarecomponents, transmission media and network protocols. While FIG. 3 showsthe network 302 as a single network, the network 302 can also includemultiple interconnected networks listed above.

FIG. 4 illustrates an exemplary remote resource pre-fetching arrangement400 according to certain embodiments of the disclosed subject matter.The remote resource pre-fetching arrangement can include a user 405, oneor more pre-fetch clients 410/410′, a network 430, a pre-fetch server440, and a remote resource server 450. Each pre-fetch client 410/410′can include a pre-fetch agent 420/420′. The pre-fetch clients 410/410′,the pre-fetch server 440, the remote resource server 450 can be directlyor indirectly coupled to the network 430 and communicate among eachother via the network 430, which can be wired, wireless, or acombination of both.

The pre-fetch client 410/410′, like each client 306 illustrated in FIG.3, can include a desktop computer, a mobile computer, a tablet computer,a cellular device, a smartphone, or any computing systems that arecapable of performing computation. The pre-fetch server 440 can providesupporting service to the pre-fetch clients and is discussed in detailbelow. The remote resource server 450 can store or manage the remoteresources the pre-fetch client 410/410′ may request and download. Thepre-fetch server 440 or the remote resource server 450 can also includea desktop computer, a mobile computer, a tablet computer, a cellulardevice, a smartphone, or any computing systems that are capable ofperforming computation. Although FIG. 4 shows the pre-fetch server 440and the remote resource server 450 as a single server, the pre-fetchserver 440 and/or the remote resource server 450 can also include morethan one physical and/or logical servers. The network 430, like thecommunication network 302 illustrated in FIG. 3, can include theInternet, a cellular network, a telephone network, a computer network, apacket switching network, a line switching network, a local area network(LAN), a wide area network (WAN), a global area network, a corporatenetwork, an intranet, a virtual network, or any number of privatenetworks currently referred to as an Intranet, and/or any other networkor combination of networks that can accommodate data communication. Suchnetworks can be implemented with any number of hardware and softwarecomponents, transmission media and network protocols. While FIG. 4 showsthe network 430 as a single network, the network 430 can includemultiple interconnected networks listed above.

Each pre-fetch client 410/410′ can include a pre-fetch agent 420/420′.The pre-fetch agent 420/420′ can be embedded inside the pre-fetch client410/410′ as a software module, a hardware component, or a combination ofboth (described more fully below). Additionally, the pre-fetch agent420/420′ can also be separate from but coupled to the pre-fetch client410/410′. The pre-fetch client 410/410′ can communicate with thepre-fetch server 440 directly or via its pre-fetch agent 420/420′. Theuser 405 can directly or indirectly access one or more pre-fetch clients410 and 410′ which can collectively record and utilize the historicalrequests made by the user 405. For example, when the user 405 uses thepre-fetch client 410, the pre-fetch agent 420 can pre-fetch remoteresources based on historical requests made by the user 405 on themultiple pre-fetch clients (e.g., 410 and 410′, etc.). An example ofthis is if a user has multiple mobile devices (e.g., an iPhone and aniPad). The pre-fetch client 410 can track usage on both devices to makepredictions on which resources to pre-fetch.

FIG. 5 illustrates a block diagram of an exemplary pre-fetch agent 420according to certain embodiments of the disclosed subject matter. Thepre-fetch agent 420 can include a probability calculator 510, a resourcepre-fetcher 520, a request interceptor 530, a historical request manager540, a request fulfiller 550, a pre-fetched resource manager 580, apre-fetch server interface 570, and a pre-fetch configurator 580. Thepre-fetch agent 420 can include additional modules, fewer modules, orany other suitable combination of modules that perform any suitableoperation or combination of operations.

The probability calculator 510 can calculate a probability that a userwill request a certain remote resource within, for example, a validityperiod. A validity period can be defined as the time duration that aremote resource is considered valid on a local device after it isfetched from a remote source. A remote resource's validity period candepend on many factors, such as the nature of the remote resource, howfrequently it is expected to change, how important it is to reflect thelatest change, the predictability of the remote resource based onhistorical information, and the cost of pre-fetching the remote resourceover various network conditions, etc. In one example, a desktopwallpaper for a user account can be pre-fetched from a remote server(e.g., an AppSense User Virtualization server) and its validity periodcan be set to up to a few hours based on the assumption that downloadingthe wallpaper can take a long time and an out-of-date wallpaper does notseverely impact the user experience. In another example, the validityperiod of a user's contact list can be set longer than that of theuser's e-mail messages since the contact list is expected to be updatedless frequently than the e-mail messages. In yet another example, thevalidity period of an application's settings (e.g., Windows registry) ordata files can be set to a long value if the settings or data files areonly expected to change once per application session or expected not tochange at all after installation.

A validity period of a remote request (R) can be denoted as Validity(R).Validity(R) can be zero by default, which can mean that thecorresponding remote resource is never pre-fetched and any remoterequests, no matter how frequent they are, will result in a synchronousnetwork operation (e.g., fetching the remote resource from a remotesource). Preferably, remote resources that are frequently requested andhave relatively large latency can be pre-fetched up to a period ofValidity(R) (>0) before the remote resource is used. In one example, ifValidity(DesktopWallpaper)=1 hour, the pre-fetched agent client 410 canrespond to a request for “Desktop Wallpaper” to a remote source with apre-fetched cache version if it has been pre-fetched within the last 1hour. In another example, Validity(WordDictionaryLanguage)=1 day;Validity(NewEmail)=1 minute, etc.

The probability that a user will request a certain remote resourcewithin a validity period can be calculated based on historical requestsfor the remote resource by the user. For example, the system candetermine the probability P that a request R with parameters (p1, p2, p3. . . ) will be made within the validity period of R. This can beexpressed in equation form as:P=Probability((Time(R(p1,p2,p3 . . . ))−Time(Now))<Validity(R))where:

-   -   R is the remote request;    -   p1, p2, p3 . . . are the parameters of the remote request (R),        such as UserID, ApplicationID, Registry or File path,        Department, Group, Day of the Week or any other custom parameter        necessary to identify a certain remote request for the remote        resource in a certain context;    -   Time(R(p1, p2, p3 . . . )) is the time a Request R with        parameters p1, p2, p3 . . . will occur;    -   Time(Now) is the current time; and    -   Validity(R) is the validity period of R.        The parameters (p1, p2, p3 . . . ) can be used to build a        predictive model. The probability that a user will request a        certain remote resource R_((user, application, . . . )) during        the time interval from t₀ to t₁ can be calculated as:

P_(t₀  to  t₁) = ∫_(t₀)^(t₁)Probability_(Request(user, application))(t) 𝕕twhere:

-   -   t₀=Time(Now); and    -   t₁=t₀+Validity(Request)

In some embodiments, the historical requests by any user, for anyrequest, and/or for any parameters can be represented in a more compactform. Thus, the probability can be calculated based on a representationof the historical requests, instead of the historical requeststhemselves. For example, a representation can include a summary of ahistorical usage pattern, such as a histogram, a probability densityfunction, or the characteristic function of a probability densityfunction. FIG. 6 illustrates an example of how a historical pattern canbe represented. The representation of the historical requests can bemaintained for all users, for all requests, and/or for all parameters.The representation can also be transferred to any pre-fetch clients thatmight need it to calculate probabilities for a particular user. FIG. 6illustrates an example of calculating the probability of a certainrequest between 7 a.m. and 8 p.m. The calculated probability can providea confidence level of the prediction.

Still referring to FIG. 5, the resource pre-fetcher 520 can pre-fetchthe remote resource if, for example, the calculated probability isgreater than a threshold. A threshold can be a pre-fetch aggressiveness,which can indicate how aggressively the pre-fetch agent 420 shouldpre-fetch remote resources. On one hand, an overly aggressive pre-fetchpolicy (e.g., pre-fetching everything) can put so much load on theremote resource server/network that synchronous requests to fetch remoteresources when actually needed can become slow while most of thepre-fetched remote resources are discarded because their respectivevalidity periods expire. On the other hand, an overly passive pre-fetchpolicy can result in too few remote resources being pre-fetchedresulting in a situation where most applications would still need tomake synchronous requests for remote resources while the network andserver resources remain idle for most of the time.

Pre-fetch aggressiveness can be denoted as Ag, wherein 0≦Ag≦1. Ag=0.0can mean that a remote resource is pre-fetched only when historical datasuggests 100% certainty that a request for this remote resource will bemade within its validity period. Ag=1.0 can mean that a remote resourceis pre-fetched whenever the local cache expires, regardless whether auser is likely to explicitly or implicitly make a request for the remoteresource. The pre-fetch aggressiveness can be defined at differentlevels, such as for each remote resource, for certain groups of remoteresources, for all remote resources for a certain user, for certainremote resources for a certain group of users, for all remote resourcesfor all users, for each user, for certain groups of users, or for allusers, etc. The pre-fetch aggressiveness can also be defined for certainconditions, such as when connected via a slow network connection. Thepre-fetch aggressiveness can be configured by a system administratorand/or customized by individual users. Typically, 0<Ag<1, Ag can be setbased on various factors, such as the server and/or networkconfigurations, the users, and remote resources, etc.

Still referring to FIG. 5, the request interceptor 530 can intercept arequest for a remote resource. The request can be made by a user 405 orby a pre-fetch client 410, directly or indirectly, explicitly orimplicitly. In one example, a user can explicitly request for a remoteresource (e.g., a webpage such as www.weather.com) directly. In anotherexample, a user can launch an application which can make the request(e.g., for application settings, personalization settings, etc.), eitheron startup or when certain feature is activated, with or without theuser's knowledge. In another example, a user can log in to her networkaccount; at that time the operation system can make the request to aremote server (e.g., to retrieve the user profile, desktop settings, andwallpapers, etc.). Once a request for a remote resource is intercepted,the pre-fetch agent 420 can try to fulfill the request and thus avoidthe potentially costly and time-consuming downloading over the network.

The historical request manager 540 can record the request for the remoteresource. The request can be added to the historical requests by theuser 405. By accumulating historical data and applying machine learningtechniques (e.g., Bayesian networks, Artificial neural networks, supportvector machines, Boosting algorithms, etc.), prediction accuracy can beimproved over time and increased usage within an organization. Forexample, a user's first logon may not be as predictable as the user's200^(th) logon, if 90% of the user's previous logon events occurredbetween 8:30 am and 9:00 am. In another example, if a user opensMicrosoft Outlook within 2 minutes of logon 90% of the time, it becomeseasier to predict when Microsoft Outlook might need network based remoteresources. Additionally or alternatively, the request can be added to arepresentation of the historical requests by the user 405. Optionally,certain or all components of a similar historical request manager canreside on a pre-fetch server 440.

The request fulfiller 550 can fulfill the request for the remoteresource by the user. When the remote resource is already pre-fetchedand cached on the local device (e.g., pre-fetch client 410, etc.), therequest fulfiller 550 can use the pre-fetched remote resource to fulfillthe request. As a result, the requesting application (and the user)typically does not need to wait for the potentially costly andtime-consuming downloading operation over the network.

The pre-fetched resource manager 560 can manage the pre-fetched remoteresources on the local device (e.g., pre-fetch client 410, etc.). Insome embodiments, the pre-fetched resource manager 560 can check for thepre-fetched resources periodically or on demand (e.g., when a request isintercepted). If a pre-fetched resource has expired (e.g., its validityperiod has lapsed), the pre-fetched resource manager 560 can render thepre-fetched resource obsolete (e.g., by deleting the pre-fetchedresource or by marking it obsolete, etc.). Rendering a pre-fetchedresource obsolete can indicate to the pre-fetch agent 420 that it shouldno longer be used to fulfill a request for this remote resource. Thepre-fetch agent 420 can pre-fetch a new copy of the remote resource fromits remote source if, e.g., the remote resource is determined expiredand needs to be pre-fetched again. Optionally, certain or all componentsof a similar pre-fetched resource manager can reside on a pre-fetchserver 440.

The pre-fetch server interface 570 can provide the communication betweenthe pre-fetch agent 420 and the pre-fetch server 440. In someembodiments, the pre-fetch server interface 570 can download/upload thehistorical requests of the user from/to the pre-fetch server 440. Thedownload/upload can occur automatically, periodically, or on demand. Asdiscussed earlier, the historical requests of the user can be collectedfrom multiple devices (e.g., pre-fetch clients 410 and 410′) accessed bythe user. The pre-fetch server interface 570 can allow the prediction ofa use's request on one device (e.g., 410) to utilize the user's requestsgathered across multiple devices (e.g., 410 and 410′). For example, if auser 405 who has been using one device (e.g., pre-fetch client 410) foran extended period of time has just started using another device (e.g.,pre-fetch client 410′), the user's historical requests recorded on thefirst device (e.g., pre-fetch client 410) can be uploaded to thepre-fetch server 440 then downloaded to the second device (e.g.,pre-fetch client 410′). In this way, the pre-fetch agent (e.g., 420′) onthe second device (e.g., pre-fetch client 410′) can calculateprobabilities utilizing the user's the historical requests on otherdevices, even if this might be the first time the user uses the seconddevice (e.g., pre-fetch client 410′). In some other embodiments, thepre-fetch server interface 570 can download the historical requests ofother users from the pre-fetch server 440. The download can occurautomatically, periodically, or on demand. The pre-fetch serverinterface 570 can allow the prediction of a use's request on one device(e.g., 410) to utilize the historical requests gathered from otherusers. For example, if a new user 405 joins an organization and has juststarted using a device (e.g., pre-fetch client 410), the historicalrequests collected for existing users of the organization can bedownloaded to the device (e.g., pre-fetch client 410). In this way, thepre-fetch agent (e.g., 420) on the device (e.g., pre-fetch client 410)can predict the new user's request utilizing the other users' thehistorical requests, even if this might be the first time the new user405 uses any of the device (e.g., pre-fetch clients 410 and 410′).Additionally or alternatively, a representation of the historicalrequests (e.g., a summary of the historical request) can bedownloaded/uploaded from/to the pre-fetch server 440 through thepre-fetch server interface 570.

The pre-fetch configurator 580 can configure the pre-fetch agent 420. Insome embodiments, the pre-fetch configurator 580 can set a validityperiod for a remote resource. A validity period can be set uniquely foreach remote resource, commonly for a group of remote resources, oruniversally for all remote resources. Validity periods can be set peruser 405, per pre-fetch client 410/410′, or across all pre-fetchclients. The validity period can be set by a system administrator and/orcan be customized by and/or for each user 405. In some otherembodiments, the pre-fetch configurator 580 can set a pre-fetchaggressiveness (Ag) as discussed earlier. Optionally, certain or allcomponents of a similar pre-fetch configurator can reside on a pre-fetchserver 440.

FIG. 7 illustrates an exemplary process 700 of pre-fetching remoteresources according to certain embodiments of the disclosed subjectmatter. The process 700 can be modified by, for example, having stagesrearranged, changed, added and/or removed.

At stage 710, a probability that a user 405 can request a remoteresource within a validity period is calculated. In some embodiments, aprobability calculator 510 can calculate the probability based on thehistorical requests for the remote resource by the user, on the samedevice or across multiple devices. In some other embodiments, aprobability calculator 510 can calculate the probability based on thehistorical requests for the remote resource by the user and/or otherusers. Additionally or alternatively, the probability calculator 510 cancalculate the probability based on a representation of the historicalrequests.

At stage 720, the remote resource can be pre-fetched from its remotesource if the calculated probability is greater than a threshold. Asdiscussed earlier, a threshold can be a pre-fetch aggressiveness.

At stage 730, a request for the remote resource (e.g., by the user 405)can be intercepted. In some embodiments, a request interceptor 530 canintercept the request by the user 405 on the device (e.g., pre-fetchclient 410). As discussed earlier, the request can be made by the user405 or by a pre-fetch client 410, directly or indirectly, explicitly orimplicitly.

At stage 740, the request for the remote resource can be recorded. Insome embodiments, a historical request manager 540 can record therequest and add it into the historical requests (and/or a representationthereof) by the user 405. As discussed earlier, prediction accuracy canbe improved over time and increased usage.

At stage 750, the request for the remote resource can be fulfilled. Insome embodiments, a request fulfiller 550 can fulfill the request by theuser 405 using the pre-fetched remote source cached on the local device(e.g., pre-fetch client 410, etc.). As a result, the requestingapplication (and the user) does not need to wait for the potentiallycostly and time-consuming downloading operation over the network. Insome embodiments, the request fulfiller 550 can fulfill the request bythe user 405 via a synchronous request for remote resource dependingupon policy.

Optionally, the process 700 can include other stages. In one example,the process 700 can include a stage where the pre-fetched remoteresource is periodically checked and rendered obsolete if it hasexpired. In another example, the process 700 can include a stage wherethe historical requests (and/or a representation thereof) areuploaded/downloaded to/from a remote server (e.g., pre-fetch server440). In yet another example, the process 700 can include a stage wherecertain pre-fetch settings are configured (e.g., validity periods,threshold/pre-fetch aggressiveness values, etc.).

According to embodiments of the disclosed subject matter, data that islikely to remain constant over a medium to long term basis canpreferably be predictively pre-fetched for consumption by anapplication. Some examples of such data include:

-   -   User/Machine specific registry settings to be used by an        application may need to be downloaded from a central server        resource when providing a virtual machine or application        environment.    -   User specific files that may need to be downloaded from a server        such as desktop wallpapers, application data files, application        configuration files. In one example, AppSense Environment        Manager (EM) can download registry, data and configuration files        for an application when it starts up.)        In contrast, real time application data such as streams or live        data are preferably not pre-fetched.

In one exemplary scenario, applications can include a binary componentwhich can be common to all installations on a particular operatingsystem/hardware architecture, and a configuration component that candefine how that application behaves in a particular context. Forexample, Microsoft Word can behave differently in different localesaccording to the language selected for spell checking. The configurationcomponent can be stored on a central resource linked to a particularuser (e.g., via AppSense User Virtualization, which can virtualize dataand resources based on the user instead of the machines). For thisscenario, the configuration component can be pre-fetched to the localdevices where the user logs in.

FIG. 8 illustrates a block diagram of an exemplary pre-fetch client 410according to certain embodiments of the disclosed subject matter. Thepre-fetch client 410 can include at least one processor 802 and at leastone memory 804. The processor 802 can be hardware that is configured toexecute computer readable instructions such as software. The processor802 can be a general processor or be an application specific hardware(e.g., an application specific integrated circuit (ASIC), programmablelogic array (PLA), field programmable gate array (FPGA), or any otherintegrated circuit). The processor 802 can execute computer instructionsor computer code to perform desired tasks. The memory 804 can be atransitory or non-transitory computer readable medium, such as flashmemory, a magnetic disk drive, an optical drive, a programmableread-only memory (PROM), a read-only memory (ROM), a random accessmemory (RAM), or any other memory or combination of memories.

The pre-fetch client 410 can also optionally include a user interface(UI) 806, a file system module 808, and a communication interface 810.The UI 806 can provide an interface for users to interact with thepre-fetch client 410 in order to access the remote resource pre-fetchingarrangement 400. The file system module 808 can be configured tomaintain a list of all data files, including both local data files andremote data files, in every folder in a file system. The file systemmodule 808 can be further configured to coordinate with the memory 804to store and cache files/data. The communication interface 810 can allowthe pre-fetch client 410 to communicate with external resources (e.g., anetwork or a remote client/server). The pre-fetch client 410 can alsoinclude a pre-fetch agent 420. The description of the pre-fetch agent420 and its functionalities can be found in the discussion of FIGS. 1-7.The pre-fetch client 410 can include additional modules, fewer modules,or any other suitable combination of modules that perform any suitableoperation or combination of operations.

It is to be understood that the disclosed subject matter is not limitedin its application to the details of construction and to thearrangements of the components set forth in the following description orillustrated in the drawings. The disclosed subject matter is capable ofother embodiments and of being practiced and carried out in variousways. Also, it is to be understood that the phraseology and terminologyemployed herein are for the purpose of description and should not beregarded as limiting.

As such, those skilled in the art will appreciate that the conception,upon which this disclosure is based, may readily be utilized as a basisfor the designing of other structures, methods, and systems for carryingout the several purposes of the disclosed subject matter. It isimportant, therefore, that the claims be regarded as including suchequivalent constructions insofar as they do not depart from the spiritand scope of the disclosed subject matter.

Although the disclosed subject matter has been described and illustratedin the foregoing exemplary embodiments, it is understood that thepresent disclosure has been made only by way of example, and thatnumerous changes in the details of implementation of the disclosedsubject matter may be made without departing from the spirit and scopeof the disclosed subject matter, which is limited only by the claimswhich follow.

A “server,” “client,” “agent,” “module,” “interface,” and “host” is notsoftware per se and includes at least some tangible, non-transitoryhardware that is configured to execute computer readable instructions.In addition, the phrase “based on” does not imply exclusiveness—forexample, if X is based on A, X can also be based on B, C, and/or D, . .. .

What is claimed is:
 1. A computerized method of pre-fetching remoteresources, comprising: calculating a probability of a request for aremote resource by a user within a validity period, based on arepresentation of historical requests for the remote resource by theuser; pre-fetching the remote resource if the probability is greaterthan a threshold; intercepting an actual request for the remote resourceby the user; recording the actual request into the representation of thehistorical requests by the user; and fulfilling the actual request forthe remote resource using the pre-fetched remote resource.
 2. Thecomputerized method of claim 1, further comprising rendering thepre-fetched remote resource obsolete if the pre-fetched remote resourceexpires based on the validity period.
 3. The computerized method ofclaim 1, further comprising receiving the representation of thehistorical requests by the user from a remote server, wherein thehistorical requests for the remote resource originate from multipledevices used by the user.
 4. The computerized method of claim 1, furthercomprising transmitting the representation of the historical requests bythe user to the remote server.
 5. The computerized method of claim 1,further comprising: receiving a second representation of additionalhistorical requests for the remote resource by other users from a remoteserver; and calculating the probability of the request for the remoteresource by the user within the validity period, based on the secondrepresentation of the additional historical requests for the remoteresource by the other users.
 6. The computerized method of claim 1,further comprising setting the validity period.
 7. The computerizedmethod of claim 1, further comprising setting the threshold.
 8. Acomputer system for pre-fetching remote resources, comprising: aprobability calculator configured to calculate a probability of arequest for a remote resource by a user within a validity period, basedon a representation of historical requests for the remote resource bythe user; a resource pre-fetcher configured to pre-fetch the remoteresource if the probability is greater than a threshold; a requestinterceptor configured to intercept an actual request for the remoteresource by the user; a historical request manager configured to recordthe actual request into the representation of the historical requests bythe user; and a request fulfiller configured to fulfill the request forthe remote resource using the pre-fetched remote resource.
 9. Thecomputer system of claim 8, further comprising a pre-fetched resourcemanager configured to render the pre-fetched remote resource obsolete ifthe pre-fetched remote resource expires based on the validity period.10. The computer system of claim 8, further comprising a pre-fetchserver interface configured to download the representation of thehistorical requests by the user from a remote server, the historicalrequests for the remote resource originating from multiple devices usedby the user.
 11. The computer system of claim 10, wherein the pre-fetchserver interface is further configured to transmit the representation ofthe historical requests by the user to the remote server.
 12. Thecomputerized method of claim 10, wherein: the pre-fetch server interfaceis further configured to receive a second representation of additionalhistorical requests for the remote resource by other users from a remoteserver; and the probability calculator is further configured tocalculate the probability of the request for the remote resource by theuser within the validity period based on the second representation ofthe additional historical requests for the remote resource by the otherusers.
 13. The computer system of claim 8, further comprising apre-fetch configurator configured to set the validity period.
 14. Thecomputer system of claim 8, further comprising a pre-fetch configuratorconfigured to set the threshold.
 15. A non-transitory computer readablemedium having executable instructions operable to, when executed by aprocessor, cause the processor to: calculate a probability of a requestfor a remote resource by a user within a validity period, based on arepresentation of historical requests for the remote resource by theuser; pre-fetch the remote resource if the probability is greater than athreshold; intercept an actual request for the remote resource by theuser; record the actual request into the representation of thehistorical requests by the user; and fulfill the actual request for theremote resource using pre-fetched remote resource.
 16. Thenon-transitory computer readable medium of claim 15, wherein theexecutable instructions are further operable to, when executed by theprocessor, cause the processor to render the pre-fetched remote resourceobsolete if the pre-fetched remote resource expires based on thevalidity period.
 17. The non-transitory computer readable medium ofclaim 15, wherein the executable instructions are further operable to,when executed by the processor, cause the processor to receive therepresentation of the historical requests by the user from a remoteserver, wherein the historical requests for the remote resourceoriginate from multiple devices used by the user.
 18. The non-transitorycomputer readable medium of claim 15, wherein the executableinstructions are further operable to, when executed by the processor,cause the processor to transmit the representation of the historicalrequests by the user to the remote server.
 19. The non-transitorycomputer readable medium of claim 15, wherein the executableinstructions are further operable to, when executed by the processor,cause the processor to: receive a second representation of additionalhistorical requests for the remote resource by other users from a remoteserver; and calculate the probability of the request for the remoteresource by the user within the validity period, based on the secondrepresentation of the additional historical requests for the remoteresource by the other users.
 20. The non-transitory computer readablemedium of claim 15, wherein the executable instructions are furtheroperable to, when executed by the processor, cause the processor to setthe validity period.
 21. The non-transitory computer readable medium ofclaim 15, wherein the executable instructions are further operable to,when executed by the processor, cause the processor to set thethreshold.